/*
 * Clase encargada de generar el formulario de administración del soft
 * 
 */
package grest.view;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import grest.controller.*;
import grest.model.Clientes;
import grest.model.Mozos;
import grest.model.Productos;
import grest.model.Reservas;
import grest.model.Mesas;

/**
 *
 * @author Santiago, Rodrigo, Agustín
 */
public class FormAdmin {
    public final static String SALON = "Salón";
    public final static String RESERVAS = "Reservas";
    public final static String MOZOS = "Mozos";
    public final static String MESAS = "Mesas";
    public final static String CLIENTES = "Clientes";
    public final static String ESTADISTICAS = "Estadisticas";
    public final static String CONFIGURACION = "Configuración";
    public final static String PRODUCTOS = "Productos";
    public final static String SALIR = "Salir";

    private JFrame form = new JFrame("g-Rest");
    private JSplitPane pnlDivisor = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
    private JPanel pnlBotonesPrinc = new JPanel();
    private JPanel pnlBotonesPrincFunc = new JPanel();
    private JPanel pnlBotonesPrincOtros = new JPanel();
    private JPanel pnlVistaActual = new JPanel();
    private JButton btnSalon = new JButton(SALON);
    private JButton btnReservas = new JButton(RESERVAS);
    private JButton btnMozos = new JButton(MOZOS);
    private JButton btnClientes = new JButton(CLIENTES);
    private JButton btnProductos = new JButton(PRODUCTOS);
    private JButton btnEstadisticas = new JButton(ESTADISTICAS);
    private JButton btnConfiguración = new JButton(CONFIGURACION);
    private JButton btnMesas = new JButton(MESAS);
    private JButton btnSalir = new JButton("Salir");
    
    //Cards
    private CardLayout cardl = new CardLayout();
    private VistaSalon pnlSalon = new VistaSalon();
    private VistaABBM pnlReservas = new VistaABBM(RESERVAS,new Reservas());
    private VistaABBM pnlMozos = new VistaABBM(MOZOS,new Mozos());
    private VistaABBM pnlMesas = new VistaABBM(MESAS,new Mesas());
    private VistaABBM pnlClientes = new VistaABBM(CLIENTES, new Clientes());
    private VistaABBM pnlProductos = new VistaABBM(PRODUCTOS, new Productos());
    private VistaEstadisticas pnlEstadisticas = new VistaEstadisticas();
    private VistaConfig pnlConfiguracion = new VistaConfig();
    
    
    /**
     * Encargado de construír la interfaz
     */
    public FormAdmin(){
        //Configuro el layout del JFrame
        form.setLayout(new BorderLayout(5,5));
        //Agrego el pnael de tamaño ajustable
        form.add(pnlDivisor,BorderLayout.CENTER);
        pnlDivisor.setLeftComponent(pnlBotonesPrinc);
        pnlDivisor.setRightComponent(pnlVistaActual);
        //Construcción del panel de botones de opciones
        pnlBotonesPrinc.setLayout(new BorderLayout());
        pnlBotonesPrinc.add(pnlBotonesPrincFunc,BorderLayout.NORTH);
        pnlBotonesPrinc.add(pnlBotonesPrincOtros,BorderLayout.SOUTH);
        //Construcción del panel de funciones principales
        pnlBotonesPrincFunc.setLayout(new GridLayout(7, 1));
        pnlBotonesPrincFunc.add(btnSalon);
        pnlBotonesPrincFunc.add(btnReservas);
        pnlBotonesPrincFunc.add(btnClientes);
        pnlBotonesPrincFunc.add(btnMozos);
        pnlBotonesPrincFunc.add(btnMesas);
        pnlBotonesPrincFunc.add(btnProductos);
        pnlBotonesPrincFunc.add(btnEstadisticas);
        //Construcción del panel de las otras funciones
        pnlBotonesPrincOtros.setLayout(new GridLayout(2, 1));     
        pnlBotonesPrincOtros.add(btnConfiguración);
        pnlBotonesPrincOtros.add(btnSalir);
        //Construcción del panel de las vistas actuales
        pnlVistaActual.setLayout(new CardLayout());
        pnlVistaActual.add(pnlSalon,SALON);
        pnlVistaActual.add(pnlReservas,RESERVAS);
        pnlVistaActual.add(pnlMozos,MOZOS);
        pnlVistaActual.add(pnlMesas,MESAS);
        pnlVistaActual.add(pnlClientes,CLIENTES);
        pnlVistaActual.add(pnlProductos,PRODUCTOS);
        pnlVistaActual.add(pnlEstadisticas,ESTADISTICAS);
        pnlVistaActual.add(pnlConfiguracion,CONFIGURACION);
        //Establezco la vista predeterminada
        cardl = (CardLayout)(pnlVistaActual.getLayout());
        cardl.show(pnlVistaActual, SALON);
        
        //eventos Botones
        CntrlrFormAdmin controladorForm = new CntrlrFormAdmin(this);
        btnSalon.addActionListener(controladorForm);
        btnReservas.addActionListener(controladorForm);
        btnMozos.addActionListener(controladorForm);
        btnMesas.addActionListener(controladorForm);
        btnClientes.addActionListener(controladorForm);
        btnEstadisticas.addActionListener(controladorForm);
        btnConfiguración.addActionListener(controladorForm);
        btnProductos.addActionListener(controladorForm);
        btnSalir.addActionListener(controladorForm);
        
        //Establezco relaciones entre observadores y observables
        pnlMesas.getController().addObserver(pnlSalon);
        
        form.setSize(1024, 600);
        //Establezco política de tabuladores
        pnlVistaActual.addFocusListener(new FocusAdapter() {
            @Override
            public void focusGained(FocusEvent e){
                for(Component c: pnlVistaActual.getComponents()){
                    if(c.isVisible()){
                        ((JPanel)c).requestFocus();
                    }
                }
            }
        });
        form.addWindowFocusListener(new WindowAdapter() {
            @Override
            public void windowGainedFocus(WindowEvent e) {
                pnlVistaActual.requestFocus();
            }
        });
        //Atajos de teclado
        btnSalon.setMnemonic(KeyEvent.VK_1);
        btnReservas.setMnemonic(KeyEvent.VK_2);
        btnMozos.setMnemonic(KeyEvent.VK_3);
        btnMesas.setMnemonic(KeyEvent.VK_4);
        btnClientes.setMnemonic(KeyEvent.VK_5);
        btnProductos.setMnemonic(KeyEvent.VK_6);
        btnEstadisticas.setMnemonic(KeyEvent.VK_7);
        btnConfiguración.setMnemonic(KeyEvent.VK_8);
        
        btnSalir.setMnemonic(KeyEvent.VK_0);
        
        
                
        form.setVisible(true);
        form.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
    }

    
    
    public JButton getButton(String boton) {
        if(boton.equals(CLIENTES)) return btnClientes;
        else if(boton.equals(CONFIGURACION)) return btnConfiguración;
        else if(boton.equals(ESTADISTICAS)) return btnEstadisticas;
        else if(boton.equals(MOZOS)) return btnMozos;
        else if(boton.equals(MESAS)) return btnMesas;
        else if(boton.equals(PRODUCTOS)) return btnProductos;
        else if(boton.equals(RESERVAS)) return btnReservas;
        else if(boton.equals(SALON)) return btnSalon;
        else if(boton.equals(SALIR)) return btnSalir;
        return null;
    }
   
    
    public void setVistaActual(String vista){
        cardl.show(pnlVistaActual,vista);
        pnlVistaActual.requestFocus();
    }      
            
}
